(一)样本的数据结构
一张已经被标记为“xxx”的图 被称作样品

图像由形状(长度,高度,深度=3)的3D阵列表示。然而,当您读取图像作为算法的输入时,您可以将其转换为形状为(长度 * 高度* 3,1)的向量。换句话说,可以将三维阵列“展开”或重塑为一维矢量。也就是把3个图层的数据连起来排成一列,成为一个 x
具体方法如下:
def image2vector(image):
a=image.shape[0]
b=image.shape[1]
c=image.shape[2]
v=image.reshape(a*b*c,1)
return v
处理好图像后,得到向量x作为输入变量
输入
x: 表示一个 nx 维度特征,为输入特征,维度为 (nx,1)。
输出
y: 表示输出结果,取值为 (0,1);
(x(i),y(i)): 表示第 i 组数据,可能是训练数据,也可能是测试数据,此处暂译为训练数据;
X=[x(1),x(2),...,x(m)]: 表示不同的训练数据组成的输入矩阵,放在一个 nx×m 的矩阵中;
Y=[y(1),y(2),...,y(m)]: 对应训练不同训练数据组成的输出矩阵,维度为 1×m。
表示测试集的时候,我们会用 M 来默认表示 Mtrain ,而测试集 Mtest 需要单独注明:
M=[(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))]
(二)逻辑回归
对于二元分类问题来说,给定一个输入特征向量 x,它可能属于一类或另一类,模型的任务就是找出其属于哪一类。
我们的模型在计算过程中,需要将输入特征 x 转换为输出估计值 y^。
比如对于猫图而言,如果“是猫图”的 y 表示为 1, “不是猫图”的 y 表示为 0
那么 y^ 需要在(0,1)之内,表示“是猫图”的可能性
在开始之前,我们先介绍一下用sigmoid函数来处理向量x
For x∈Rn, sigmoid(x)=sigmoidx1x2...xn=1+e−x111+e−x21...1+e−xn1(1)
sigmoid函数的导数为:
sigmoid_derivative(x)=σ′(x)=σ(x)(1−σ(x))(2)
import numpy as np
def sigmoid(x):
s=1/(1+np.exp(-x))
return s
def sigmoid_derivative(x):
ds=sigmoid(x)*(1-sigmoid(x))
return ds
接下来就是预测的模型
y^(i)=σ(wTx(i)+b), where σ(z)=1+e−z1
Given {(x(1),y(1)),…,(x(m),y(m))}, 而我们希望 y^(i)≈y(i).
如何来衡量模型的准确性呢?
需要用到 “损失函数”(loss function):
L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
然而这只是对于一个样本的衡量方法,对于一个样本集而言,需要进行累加,这称为 成本函数(Cost Function)
J(w,b)=m1i=1∑mL(y^(i),y(i))
J(w,b)=m1i=1∑m(−y(i)log(y^(i))−(1−y(i))log(1−y^(i)))
那么现在优化的方向就已经相当明确了,我们要不断修改w和b来让成本函数尽量小
而事实上,使用了sigmoid 函数,这个成本函数是有最低点的

所以直接使用 *梯度下降法*:
假设b不变时:
w=w−adwdJ(w)
其中
𝑎 :学习率( learning rate)
adwdJ(w) : 步长 (step),即向下走一步的长度
注意:
对于 dwdJ(w) 我们一般简写做 dw
拓展到两个参数就是:
w:=w−a∂w∂J(w,b),b:=b−a∂b∂J(w,b)
(三)逻辑回归中的梯度下降
(Logistic Regression Gradient Descent)
我们在前面已经了解了逻辑回归的训练过程
那么怎么计算 ∂w∂J(w,b) 和 ∂b∂J(w,b) 呢?
假设样本有2个特征 x1,x2,那么 z 的表达式应该修改为:
z=w1x1+w2x2+b
回忆一下:
y^(i)=σ(wTx(i)+b)=a, where σ(z)=1+e−z1
其损失函数为: L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
对于单个样本而言,代价函数 J(w,b) 就是损失函数:
L(a,y)=−ylog(a)−(1−y)log(1−a)
其中 𝑎 是逻辑回归的输出,